home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.10 Oct 90 / NewToolBox.π / NewToolBox.Lib / LList.Asm < prev    next >
Encoding:
Assembly Source File  |  1989-09-07  |  17.5 KB  |  555 lines  |  [TEXT/KAHL]

  1. ;******************************************
  2. ;*     L I S T         M A N A G E R      *
  3. ;******************************************
  4.  
  5. INCLUDE Library.Txt
  6.  
  7. ;--------------------------------
  8. ; ***   Externals Definition  ***
  9. ;--------------------------------   
  10.  
  11. XDEF InstalList
  12. XDEF FindList
  13. XDEF DrawLists
  14. XDEF DeactivateList
  15. XDEF ActivateList
  16. XDEF ListKey
  17.     
  18. ;-------------------------------
  19. ; **  List Resource Template  **
  20. ;------------------------------- 
  21.    
  22.     vRect    EQU 0
  23.     LdataBounds    EQU 8
  24.     cSize    EQU 16
  25.     listDef    EQU 20
  26.     LvScroll    EQU 22
  27.     LhScroll    EQU 24
  28.     drawIt    EQU 26
  29.     hasGrow    EQU 28
  30.     lRefCon    EQU 30
  31.     LTextFont    EQU 34
  32.     LTextSize    EQU 36
  33.     
  34. ;-------------------------------
  35. ; *******  List Record *********
  36. ;-------------------------------
  37.  
  38. ;  ListRec = Record  { 88 bytes}
  39. ;{  0}         rView : Rect
  40. ;{  8}          port : GrafPtr
  41. ;{ 12}        indent : Point
  42. ;{ 16}      cellSize : Point
  43. ;{ 20}       visible : Rect
  44. ;{ 28}       vScroll : ControlHandle
  45. ;{ 32}       hScroll : ControlHandle
  46. ;{ 36}      selFlags : SignedByte
  47. ;{ 37}       LActive : BOOLEAN
  48. ;{ 38}     LReserved : SignedByte
  49. ;{ 39}     listFlags : SignedByte
  50. ;{ 40}      clikTime : LongInt
  51. ;{ 44}       clikLoc : Point
  52. ;{ 48}      mouseLoc : Point
  53. ;{ 52}     LClikLoop : ProcPtr
  54. ;{ 56}     lastClick : Point
  55. ;{ 60}        refCon : LongInt
  56. ;{ 64}   listDefProc : Handle
  57. ;{ 68}    userHandle : Handle
  58. ;{ 72}    dataBounds : Rect
  59. ;{ 80}         cells : Handle
  60. ;{ 84}      maxIndex : INTEGER
  61. ;{ 86}     cellArray : Array[1:1] of INTEGER
  62.   
  63. ;-------------------------------
  64. ;***** The List AuxRecord ******
  65. ;-------------------------------
  66.     
  67. ;AuxListRec = Records {14}    
  68. ;{0}       ID        :INTEGER 
  69. ;{2}    theList        :ListHandle
  70. ;{6}    nextList    :AuxListHandle
  71. ;{10}    fontList    :INTEGER
  72. ;{12}    sizList        :INTEGER
  73.  
  74. ;---------------------------------------------------------------------------    
  75. ;FUNCTION InstalList(listID:INTEGER;whichWindow:WindowPtr):OSErr;
  76. ;---------------------------------------------------------------------------
  77.  
  78. ;-------------------------------
  79. ; Parameters
  80. ;-------------------------------
  81.  
  82. whichWindow       EQU 8
  83. listID            EQU 12    
  84.  
  85. ;-------------------------------
  86. ; Local Variables
  87. ;-------------------------------
  88.  
  89. theHandle     EQU -10
  90. theNList      EQU -6
  91. error         EQU -2
  92.  
  93. ;-------------------------------
  94.  
  95.  
  96. InstalList
  97.     LINK A6,#-10               ;
  98.     MOVEM.L A2-A4/D3-D7,-(SP)  ; 
  99.     MOVE.W #noErr,error(A6)    ;             
  100.     SUBQ.L #4,SP               ;
  101.     MOVE.L #'LIST',-(SP)       ;
  102.     MOVE.W listID(A6),-(SP)    ;get a list
  103.     _GetResource               ;template from
  104.     MOVEA.L (SP)+,A3           ;disk
  105.     SUBQ.L #2,SP               ;
  106.     _ResError                  ;   
  107.     MOVE.W (SP)+,error(A6)     ;if resource
  108.     BNE @0                     ;can't be read go @0
  109.     MOVE.L A3,theHandle(A6)    ;
  110.     MOVE.L (A3),A1             ;
  111.     SUBQ.L #4,SP               ;
  112.     PEA vRect(A1)              ;
  113.     PEA LdataBounds(A1)        ;
  114.     MOVE.L cSize(A1),-(SP)     ;
  115.     MOVE.W listDef(A1),-(SP)   ;
  116.     MOVE.L whichWindow(A6),-(SP);
  117.     MOVE.W drawIt(A1),-(SP)    ;
  118.     MOVE.W hasGrow(A1),-(SP)   ;
  119.     MOVE.W LhScroll(A1),-(SP)  ;
  120.     MOVE.W LvScroll(A1),-(SP)  ;
  121.     _LNew               ;create a new  
  122.     MOVEA.L (SP)+,A1           ;list
  123.     MOVE.L A1,theNList(A6)     ;
  124.     MOVE.L (A1),A1             ;
  125.     MOVE.L theHandle(A6),A0    ;
  126.     MOVE.L (A0),A0           ;set the list refcon
  127.     MOVE.L lRefCon(A0),refCon(A1);
  128.     MOVE.L whichWindow(A6),A0    ;
  129.     MOVE.L WrefCon(A0),A0    ;
  130.     MOVE.L (A0),A0        ;place the new
  131.     MOVE.L WList(A0),A2        ;listhandle                                      
  132.     MOVEA.L (A2),A3             ;in the linked list
  133.     CMPI.L #NIL,theList(A3)     ;of list but before...
  134.     BEQ @1                      ;    
  135. @3
  136.     CMPI.L #NIL,nextList(A3)    ;we must find
  137.     BEQ @2                      ;the last list
  138.     MOVEA.L nextList(A3),A3     ;AuxRec of our  
  139.     MOVEA.L (A3),A3             ;linked list
  140.     BRA @3                      ;    
  141. @2
  142.     MOVEQ #SizeListAuxRec,D0    ;... we create a new
  143.     _NewHandle                  ;list AuxRec
  144.     MOVE.W D0,error(A6)         ;
  145.     BNE @0                      ;if error, go @0 
  146.     MOVE.L A0,nextList(A3)      ;
  147.     MOVEA.L A0,A3               ;
  148.     MOVEA.L (A3),A3             ;initialize all
  149.     MOVE.L theNList(A6),theList(A3);
  150.     MOVE.W listID(A6),LID(A3)    ;list AuxRec
  151.     MOVE.L #NIL,nextList(A3)     ;fields
  152.     MOVE.L theHandle(A6),A0      ;
  153.     MOVE.L (A0),A0         ;
  154.     MOVE.W LTextFont(A0),fontList(A3);
  155.     MOVE.W LTextSize(A0),sizList(A3) ;  
  156.     BRA @5            ;     
  157. @1
  158.     MOVE.L theNList(A6),theList(A3) ;it's the first
  159.     MOVE.W listID(A6),LID(A3)     ;space for the list
  160.     MOVE.L #NIL,nextList(A3)      ;has been already
  161.     MOVE.L theHandle(A6),A0       ;allocated.
  162.     MOVE.L (A0),A0          ;
  163.     MOVE.W LTextFont(A0),fontList(A3);
  164.     MOVE.W LTextSize(A0),sizList(A3) ;
  165. @5    
  166.     MOVE.L theNList(A6),A1    ;
  167.     MOVE.L (A1),A1        ;if our new
  168.     CMPI.L #NIL,vScroll(A1)    ;list has scroll bars
  169.     BEQ @4            ;will put -1 in the 
  170.     MOVE.L vScroll(A1),A0    ;cntrlRefCon of each
  171.     MOVE.L (A0),A0        ;scroll bars.
  172.     MOVE.L #-1,contrlrfCon(A0)    ;(see article)
  173.     CLR.B contrlVis(A0)        ;
  174. @4                ;
  175.     CMPI.L #NIL,hScroll(A1)    ;
  176.     BEQ @0            ; 
  177.     MOVE.L hScroll(A1),A0    ;
  178.     MOVE.L (A0),A0        ;
  179.     MOVE.L #-1,contrlrfCon(A0)    ;
  180.     CLR.B contrlVis(A0)        ;  
  181. @0
  182.     MOVE.W error(A6),D0         ;
  183.     MOVEM.L (SP)+,A2-A4/D3-D7   ;
  184.     UNLK A6                     ;
  185.     MOVE.L (SP)+,A0             ;
  186.     ADD.L #6,SP                 ;
  187.     MOVE.W D0,(SP)              ;
  188.     JMP (A0)                    ;  
  189.  
  190. ;---------------------------------------------------------------------------    
  191. ;FUNCTION FindList(testControl:BOOLEAN;thePoint:Point;
  192. ;           whichWindow:WindowPtr):ListHandle;
  193. ;---------------------------------------------------------------------------
  194.  
  195. ;-------------------------------
  196. ; Parameters
  197. ;-------------------------------
  198.  
  199. thePoint            EQU 12
  200. testControl        EQU    16
  201.  
  202. ;-------------------------------
  203. ; Local Variables
  204. ;-------------------------------
  205.  
  206. AuxListHdl  EQU -4
  207.  
  208. FindList
  209.     LINK A6,#-4                     ;
  210.     MOVEM.L A2-A4/D3-D7,-(SP)       ;
  211.     MOVE.L #NIL,A1                  ;
  212.     MOVE.L whichWindow(A6),A0        ;
  213.     MOVE.L WrefCon(A0),A0        ;
  214.     MOVE.L (A0),A0            ;
  215.     MOVE.L WList(A0),A3            ;
  216.     MOVE.L A3,AuxListHdl(A6)     ;find the
  217.     MOVEA.L (A3),A3              ;first list
  218.     CMPI.L #NIL,theList(A3)      ;if no list...
  219.     BEQ @6                       ;go @6   
  220. @3 
  221.     MOVEA.L theList(A3),A2      ;
  222.     MOVE.L (A2),A2        ;
  223.     SUBQ #8,SP            ;we push the
  224.     MOVE.L rview(A2),(SP)    ;list's view rect
  225.     MOVE.L rview+4(A2),4(SP)    ;
  226.     MOVE.L SP,A0        ;    
  227.     SUBQ.L #2,SP                ;
  228.     MOVE.L thePoint(A6),-(SP)   ;
  229.     MOVE.L A0,-(SP)            ;
  230.     MOVE.L (SP),A0        ;
  231.     TST.B testControl(A6)    ;does user wants to
  232.     BEQ @5            ;know if he clicks 
  233.     CMPI.L #NIL,vScroll(A2)     ;in the list scroll
  234.     BEQ @4                ;bar ?
  235.     ADDI.W #15,6(A0)            ;if yes, we add
  236. @4
  237.     CMPI.L #NIL,hScroll(A2)     ;the scroll bar
  238.     BEQ @5                ;width to the view rect
  239.     ADDI.W #15,4(A0)            ;coordinates    
  240. @5
  241.     _PtInRect                   ;
  242.     MOVE.L AuxListHdl(A6),A3    ;
  243.     MOVE.L (A3),A3              ;    
  244.     TST.B (SP)+               ;if we've clicked
  245.     ADDQ.L #8,SP        ;in this list go @1
  246.     BNE @1            ;
  247.     CMPI.L #NIL,nextList(A3)    ;we've not clicked
  248.     BEQ @6                      ;in this one, check
  249.     MOVEA.L nextList(A3),A3     ;another list
  250.     MOVE.L A3,AuxListHdl(A6)    ;if any.if not
  251.     MOVEA.L (A3),A3             ;go @6
  252.     BRA @3                      ;    
  253. @1
  254.     MOVE.L theList(A3),A1       ;            
  255. @6
  256.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  257.     UNLK A6                         ;
  258.     MOVE.L (SP)+,A0                 ;
  259.     ADD.L #10,SP                    ;clean up the
  260.     MOVE.L A1,(SP)                  ;stack.
  261.     JMP (A0)                        ; 
  262.  
  263.  
  264. ;---------------------------------------------------------------------------    
  265. ;PROCEDURE DrawLists(whichWindow:WindowPtr);
  266. ;---------------------------------------------------------------------------
  267.  
  268. ;-------------------------------
  269. ; Local Variables
  270. ;-------------------------------
  271.  
  272. vCntl    EQU -8
  273. hCntl    EQU -12
  274.  
  275. Drawlists   
  276.     LINK A6,#-12                 ;
  277.     MOVEM.L A2-A4/D3-D7,-(SP)    ;  
  278.     MOVE.L whichWindow(A6),A0     ;
  279.     MOVE.L WrefCon(A0),A0     ;
  280.     MOVE.L (A0),A0         ;
  281.     MOVE.L WList(A0),A3         ;
  282.     MOVE.L A3,AuxListHdl(A6)     ;first list
  283.     MOVE.L (A3),A3               ;saved
  284.     CMPI.L #NIL,theList(A3)      ;if no list in
  285.     BEQ @6                       ;this window :@6
  286. @3
  287.     MOVE.L theList(A3),A3     ;
  288.     MOVE.L (A3),A3         ;
  289.     CMPI.L #NIL,vScroll(A3)     ;
  290.     BEQ @4             ;
  291.     MOVE.L vScroll(A3),-(SP)     ;
  292.     _Draw1Control         ;
  293. @4
  294.     MOVE.L AuxListHdl(A6),A3     ;
  295.     MOVE.L (A3),A3         ;
  296.     MOVE.L theList(A3),A3     ;
  297.     MOVE.L (A3),A3         ;
  298.     CMPI.L #NIL,hScroll(A3)     ;
  299.     BEQ @5             ;
  300.     MOVE.L hScroll(A3),-(SP)     ;
  301.     _Draw1Control         ;
  302. @5
  303.     MOVEA.L whichWindow(A6),A0   ;
  304.     MOVE.L AuxListHdl(A6),A3     ;
  305.     MOVE.L (A3),A3            ;
  306.     MOVE.W fontList(A3),txFont(A0)  ;
  307.     MOVE.W sizList(A3),txSize(A0)   ;
  308.     MOVE.L theList(A3),A1        ;
  309.     MOVE.L (A1),A1            ;
  310.     MOVE.L vScroll(A1),vCntl(A6)    ;
  311.     MOVE.L hScroll(A1),hCntl(A6)    ;
  312.     CLR.L hScroll(A1)            ; 
  313.     CLR.L vScroll(A1)            ;
  314.     MOVE.L visRgn(A0),-(SP)         ;
  315.     MOVE.L theList(A3),-(SP)        ;
  316.     _LUpdate                ; 
  317.     MOVE.L AuxListHdl(A6),A3        ;
  318.     MOVE.L (A3),A3                  ;
  319.     MOVE.L theList(A3),A1        ;
  320.     MOVE.L (A1),A1            ;
  321.     MOVE.L vCntl(A6),vScroll(A1)    ;
  322.     MOVE.L hCntl(A6),hScroll(A1)    ;                           
  323.     CMPI.L #NIL,nextList(A3)        ;
  324.     BEQ @6                          ;
  325.     MOVEA.L nextList(A3),A3         ;
  326.     MOVE.L A3,AuxListHdl(A6)        ;
  327.     MOVEA.L (A3),A3                 ;
  328.     BRA @3                          ;        
  329. @6
  330.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  331.     UNLK A6                         ;
  332.     MOVE.L (SP)+,A0                 ;
  333.     ADD.L #4,SP                     ;
  334.     JMP (A0)                        ;             
  335.     
  336.           
  337. ;---------------------------------------------------------------------------    
  338. ;PROCEDURE DeactivateList(whichWindow:WindowPtr);
  339. ;---------------------------------------------------------------------------
  340.  
  341. DeactivateList
  342.     LINK A6,#0                      ;
  343.     MOVEM.L A2-A4/D3-D7,-(SP)       ;
  344.     MOVEA.L whichWindow(A6),A1      ;
  345.     MOVE.L WrefCon(A1),A1           ;
  346.     MOVE.L (A1),A1                  ;
  347.     MOVE.L WactivLst(A1),A1         ;
  348.     MOVE.L A1,CurrentList(A5)       ;
  349.     CMPA.L #NIL,A1                  ;
  350.     BEQ @6                        ;
  351.     MOVE.W #FALSE,-(SP)            ;
  352.     MOVE.L A1,-(SP)                 ;
  353.     _LActivate                        ;
  354. @6
  355.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  356.     UNLK A6                         ;
  357.     MOVE.L (SP)+,A0                 ;
  358.     ADD.L #4,SP                     ;
  359.     JMP (A0)                        ; 
  360.  
  361.  
  362. ;--------------------------------------------------------------------------- 
  363. ;PROCEDURE ActivateList(whichWindow:WindowPtr);
  364. ;---------------------------------------------------------------------------
  365.         
  366.      
  367. ActivateList 
  368.     LINK A6,#0                      ;
  369.     MOVEM.L A2-A4/D3-D7,-(SP)       ;
  370.     MOVEA.L whichWindow(A6),A1      ;
  371.     MOVE.L WrefCon(A1),A1           ;
  372.     MOVE.L (A1),A1                  ;
  373.     MOVE.L WactivLst(A1),A1         ;
  374.     MOVE.L A1,CurrentList(A5)       ;
  375.     CMPA.L #NIL,A1                  ;
  376.     BEQ @6                        ;
  377.     MOVE.W #TRUE,-(SP)            ;
  378.     MOVE.L A1,-(SP)                 ;
  379.     _LActivate                        ;
  380. @6
  381.     MOVEM.L (SP)+,A2-A4/D3-D7       ;
  382.     UNLK A6                         ;
  383.     MOVE.L (SP)+,A0                 ;
  384.     ADD.L #4,SP                     ;
  385.     JMP (A0)                        ; 
  386.     
  387.   
  388.  
  389.  
  390. ;--------------------------------------------------------------------------- 
  391. ;PROCEDURE ListKey(key:Char;inList:ListHandle);
  392. ;--------------------------------------------------------------------------- 
  393.  
  394. ;-------------------------------
  395. ; Parameters
  396. ;-------------------------------
  397.  
  398. key          EQU 12
  399. inList       EQU 8
  400.  
  401. ;-------------------------------
  402. ; Local Variables
  403. ;-------------------------------
  404.  
  405. cellule      EQU -4
  406. cellule2     EQU -8
  407.  
  408. ;-------------------------------
  409.  
  410. ListKey
  411.     LINK A6,#-8                         ;
  412.     MOVEM.L A2-A4/D3-D7,-(SP)           ;
  413.     MOVE.L inList(A6),-(SP)             ;
  414.     _LLastClick                ;coordinates
  415.     MOVE.L (SP)+,cellule(A6)            ;of last clicked 
  416.     MOVE.L cellule(A6),cellule2(A6)     ;cell in "cellule"
  417.     CMPI.B #$0D,key(A6)                 ;
  418.     BEQ GoDown                          ;
  419.     CMPI.B #$03,key(A6)                 ;
  420.     BEQ GoDown                          ;
  421.     CMPI.B #$1B,key(A6)                 ;
  422.     BEQ GoAway                          ;
  423.     CMPI.B #$09,key(A6)                 ;
  424.     BEQ GoAway                          ;
  425.     CMPI.B #$1E,key(A6)                 ;
  426.     BEQ GoUp                            ;
  427.     CMPI.B #$1F,key(A6)                 ;
  428.     BEQ GoDown                          ;
  429.     CMPI.B #$1D,key(A6)                 ;
  430.     BEQ GoRight                         ;
  431.     CMPI.B #$1C,key(A6)                 ;
  432.     BEQ GoLeft                          ;
  433.     CMPI.B #$08,key(A6)                 ;
  434.     BEQ ClearCell                       ;
  435.     PEA key(A6)                         ;
  436.     MOVE.W #1,-(SP)                     ;
  437.     MOVE.L cellule(A6),-(SP)            ;
  438.     MOVE.L inList(A6),-(SP)             ;
  439.     _LAddToCell                ;
  440.     MOVE.L inList(A6),A1        ;
  441.     MOVE.L (A1),A0            ;
  442.     MOVE.L port(A0),A0            ;
  443.     MOVE.L WrefCon(A0),A3            ;
  444.     MOVE.L (A3),A3                ;
  445.     MOVE.L WList(A3),A3            ;
  446.     MOVE.L (A3),A3                ;
  447. @2    
  448.     CMPA.L theList(A3),A1        ;
  449.     BEQ @1                ;
  450.     MOVE.L nextList(A3),A3        ;
  451.     MOVE.L (A3),A3                ;
  452.     BRA @2                ;
  453. @1
  454.     MOVE.W fontList(A3),txFont(A0)      ;
  455.     MOVE.W sizList(A3),txSize(A0)       ;
  456.     MOVE.L cellule(A6),-(SP)            ;
  457.     MOVE.L inList(A6),-(SP)             ;
  458.     _LDraw                ;
  459.     BRA GoAway                          ;
  460. ClearCell
  461.     MOVE.L cellule(A6),-(SP)            ;
  462.     MOVE.L inList(A6),-(SP)             ;
  463.     _LClrCell                ;
  464.     MOVE.L cellule(A6),-(SP)            ;
  465.     MOVE.L inList(A6),-(SP)             ;
  466.     _LDraw                ;
  467.     BRA GoAway                          ;
  468.     
  469. GoUp
  470.     TST.W  cellule(A6)              ;
  471.     BEQ GoAway                      ;   
  472.     MOVE.W #FALSE,-(SP)             ;
  473.     MOVE.L cellule(A6),-(SP)        ;
  474.     MOVE.L inList(A6),-(SP)         ;
  475.     _LSetSelect                     ;
  476.     SUBI.W #1,cellule(A6)           ;
  477.     MOVE.W #TRUE,-(SP)              ;
  478.     MOVE.L cellule(A6),-(SP)        ;
  479.     MOVE.L inList(A6),-(SP)         ;
  480.     _LSetSelect                     ;
  481.     MOVE.L inList(A6),A3            ;
  482.     MOVE.L (A3),A3                  ;
  483.     MOVE.L cellule(A6),lastClick(A3);
  484.     BRA GoAway                      ;
  485.  
  486. GoDown
  487.     MOVE.W cellule(A6),D0                   ;
  488.     ADDQ #1,D0                              ;                      
  489.     MOVE.L inList(A6),A3                    ;
  490.     MOVE.L (A3),A3                          ;
  491.     LEA dataBounds(A3),A0                   ;
  492.     CMP.W  bottom(A0),D0                    ;
  493.     BEQ GoAway                              ;   
  494.     MOVE.W #FALSE,-(SP)                     ;
  495.     MOVE.L cellule(A6),-(SP)                ;
  496.     MOVE.L inList(A6),-(SP)                 ;
  497.     _LSetSelect                             ;
  498.     ADDI.W #1,cellule(A6)                   ;
  499.     MOVE.W #TRUE,-(SP)                      ;
  500.     MOVE.L cellule(A6),-(SP)                ;
  501.     MOVE.L inList(A6),-(SP)                 ;
  502.     _LSetSelect                             ;
  503.     MOVE.L inList(A6),A3                    ;
  504.     MOVE.L (A3),A3                          ;
  505.     MOVE.L cellule(A6),lastClick(A3)        ;
  506.     BRA GoAway                              ;
  507.       
  508. GoRight
  509.     MOVE.W cellule+2(A6),D0                 ;
  510.     ADDQ #1,D0                              ;                      
  511.     MOVE.L inList(A6),A3                    ;
  512.     MOVE.L (A3),A3                          ;
  513.     LEA dataBounds(A3),A0                   ;
  514.     CMP.W  right(A0),D0                     ;
  515.     BEQ GoAway                              ;   
  516.     MOVE.W #FALSE,-(SP)                     ;
  517.     MOVE.L cellule(A6),-(SP)                ;
  518.     MOVE.L inList(A6),-(SP)                 ;
  519.     _LSetSelect                             ;
  520.     ADDI.W #1,cellule+2(A6)                 ;
  521.     MOVE.W #TRUE,-(SP)                      ;
  522.     MOVE.L cellule(A6),-(SP)                ;
  523.     MOVE.L inList(A6),-(SP)                 ;
  524.     _LSetSelect                             ;
  525.     MOVE.L inList(A6),A3                    ;
  526.     MOVE.L (A3),A3                          ;
  527.     MOVE.L cellule(A6),lastClick(A3)        ;
  528.     BRA GoAway                              ;
  529.  
  530. GoLeft
  531.     TST.W  cellule+2(A6)                    ;
  532.     BEQ GoAway                              ;   
  533.     MOVE.W #FALSE,-(SP)                     ;
  534.     MOVE.L cellule(A6),-(SP)                ;
  535.     MOVE.L inList(A6),-(SP)                 ;
  536.     _LSetSelect                             ;
  537.     SUBI.W #1,cellule+2(A6)                 ;
  538.     MOVE.W #TRUE,-(SP)                      ;
  539.     MOVE.L cellule(A6),-(SP)                ;
  540.     MOVE.L inList(A6),-(SP)                 ;
  541.     _LSetSelect                             ;
  542.     MOVE.L inList(A6),A3                    ;
  543.     MOVE.L (A3),A3                          ;
  544.     MOVE.L cellule(A6),lastClick(A3)        ;
  545.     
  546. GoAway
  547.     MOVE.L inList(A6),-(SP)                 ;
  548.     _LAutoScroll                ;
  549.     MOVEM.L (SP)+,A2-A4/D3-D7               ;
  550.     UNLK A6                                 ;
  551.     MOVE.L (SP)+,A0                         ;
  552.     ADD.L #8,SP                             ;
  553.     JMP (A0)                                ; 
  554.  
  555. END